/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Interceptores;

import DAO.DAOAsignaturaOfertaAcademica;
import DAO.DAOAsignaturasAlumno;
import DAO.DAOAsignaturasOptativasAlumno;
import DAO.DAOInformacionAlumno;
import DAO.DAOProgramaEducativo;
import DAO.DAORelacionAlumnoProgramaEducativo;
import Dominio.AsignaturaOfertaAcademica;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import java.util.ArrayList;
import java.util.Map;

/**
 *
 * @author 54670
 */
public class InterceptorGeneradorHorarios implements Interceptor {

    @Override
    public void destroy() {
    }

    @Override
    public void init() {
        System.out.println("Inicializando el interceptor");
    }

    @Override
    public String intercept(ActionInvocation ai) throws Exception {

        Map<String, Object> mapSession = ai.getInvocationContext().getSession();
        String nombreUsuario = mapSession.get("nombreUsuario").toString();
        DAOAsignaturasAlumno daoAsigAlumno = new DAOAsignaturasAlumno();
        DAOAsignaturaOfertaAcademica daoAsigOF = new DAOAsignaturaOfertaAcademica();
        DAORelacionAlumnoProgramaEducativo daoRelacionAlumnoPE = new DAORelacionAlumnoProgramaEducativo();
        int claveInformacionAlumno = obtenerClaveInformacionAlumno(nombreUsuario);
        int clavePE = obtenerClavePE(claveInformacionAlumno);
        String abreviaturaPE = obtenerAbreviaturaPE(clavePE);
        int claveRelacionAlumnoPE = daoRelacionAlumnoPE.obtenerClaveRelacionAlumnoPE(claveInformacionAlumno);
        
        int numeroDeAsignaturasAlumno = 0;
        numeroDeAsignaturasAlumno += daoAsigAlumno.obtenerNumeroDeAsignaturasDelAlumno(claveRelacionAlumnoPE);        
        DAOAsignaturasOptativasAlumno daoAsignaturasOptativasAlumno = new DAOAsignaturasOptativasAlumno();
        numeroDeAsignaturasAlumno += daoAsignaturasOptativasAlumno.obtenerNumeroDeAsignaturasOptativasDelAlumno(claveRelacionAlumnoPE);
                
        
        ArrayList<AsignaturaOfertaAcademica> listaAsignaturasOfertadas = new ArrayList<AsignaturaOfertaAcademica>();
        listaAsignaturasOfertadas = obtenerAsignaturasOfertadas(abreviaturaPE);

        if (numeroDeAsignaturasAlumno > 0) {
            if (listaAsignaturasOfertadas.size() > 0) {
                return ai.invoke();
            } else {

                return "noOfertadas";
            }
        } else {

            return "noAsignaturasAlumno";
        }
    }

    private int obtenerClaveInformacionAlumno(String nombreUsuario) {
        int claveInformacionAlumno = 0;
        DAOInformacionAlumno daoInformacionAlumno = new DAOInformacionAlumno();
        claveInformacionAlumno = daoInformacionAlumno.obtenerClaveInfoAlumno(nombreUsuario);
        daoInformacionAlumno.cerrarConexionADAOInformacionAlumno();
        return claveInformacionAlumno;
    }

    private int obtenerClavePE(int claveInformacionAlumno) {
        int clavePE = 0;
        DAORelacionAlumnoProgramaEducativo daoRelacionAlumnoPE = new DAORelacionAlumnoProgramaEducativo();
        clavePE = daoRelacionAlumnoPE.obtenerClavePE(claveInformacionAlumno);
        daoRelacionAlumnoPE.cerrarConexionARelacionAlumnoProgramaEducativo();
        return clavePE;
    }

    private String obtenerAbreviaturaPE(int clavePE) {
        DAOProgramaEducativo daoPE = new DAOProgramaEducativo();
        String abreviaturaPE = daoPE.obtenerabreviaturaDePE(clavePE);
        daoPE.cerrarconexionAProgramas();

        return abreviaturaPE;
    }

    private ArrayList<AsignaturaOfertaAcademica> obtenerAsignaturasOfertadas(String abreviaturaProgramaEducativo) {
        DAOAsignaturaOfertaAcademica daoAsignaturaOfertaAcademica = new DAOAsignaturaOfertaAcademica();
        ArrayList<AsignaturaOfertaAcademica> listaAsignaturasOfertadas = daoAsignaturaOfertaAcademica.buscarAsignaturasOfertadasPorPE(abreviaturaProgramaEducativo);
        daoAsignaturaOfertaAcademica.cerrarConexionAAsignaturaOferta();

        return listaAsignaturasOfertadas;
    }
}
